Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

判断操作符——@>?

  • @>

    • 判断前者是否包含后者,可用于多种结构
    • 用于jsonb
      SELECT 
      '{
          "a":1,
          "b":2
      }'::jsonb @> '{"b":2}'::jsonb 
      
      • 返回true,因为 前面 包含 后面
    • 用于array
      SELECT ARRAY[1,4,3] @> ARRAY[3,1,3]
      
      • 返回true,因为 前面 含有 后面的所有元素
  • ?

    • 判断key是否存在
    • 用于jsonb
      • 常规用法
        SELECT 
        '{
            "a":1,
            "b":2
        }'::jsonb ? 'b'
        
        • 返回true,因为前面含有键(key)为b
        SELECT
        '["a", "b", "c"]'::jsonb ? 'b'
        
        • 返回true,因为前面含有数组元素(key)为b
      • 变种?|
        SELECT 
        '{
            "a":1,
            "b":2,
            "c":3
        }'::jsonb ?| array['b', 'd'] 
        
        • 只要后面array中任意一个元素,在前面作为key出现过,则返回true
      • 变种?&
        SELECT '["a", "b", "c"]'::jsonb ?& array['a', 'b'] 
        
        • 后面array中全部元素,都要在前面作为key出现过,才返回true
  • 一个例子

    SELECT vl.* FROM video_lesson vl
    WHERE vl.status = 'finished' AND vl.ctype = 'assistant' AND vl.members @> '{"members":["f3c45fb6-2558-4332-b7cb-5327aebbdca2"]}' 
    ORDER BY vl.start_time